function [Val,V]=Fun_V_Eval(PP,SS,UCoefp,State,Policy,Flag_SS)

%% Preliminary
% States
N_State     =   size(State,1);
x           =   State(:,1);
ID          =   State(:,2);
ret_pos     =   State(:,3);
ret_neg     =   State(:,4);
what        =   State(:,5);


ID_z        =   SS.FunApp.ExoState.State(ID,1);
ID_FI       =   SS.FunApp.ExoState.State(ID,2);
ID_RI       =   SS.FunApp.ExoState.State(ID,3);

z           =   PP.ExoState.IdioInc.Node(ID_z);
FI          =   PP.ExoState.Idio_FI.Node(ID_FI);
RI          =   PP.ExoState.Idio_RI.Node(ID_RI);

Eff_z       =   z.*(1+PP.WGap_FI(FI+1)).*(1+PP.WGap_RI(RI+1));
Eff_w       =   what.*Eff_z;
% Policy
c           =   Policy;

%% Evaluation
% Flow
wN_SS       =   SS.w_N*SS.N_N+SS.w_H*SS.N_H;
[u,Exp,l]   =   UtilityFlow_Sep(PP.NU_C,PP.NU_L,SS.PSI,Eff_w,c*wN_SS,'Consumption');
Exp         =   Exp/wN_SS;
b_fc        =   x-Exp;
Ind_pos     =   b_fc>0;
ret         =   ret_neg;
ret(Ind_pos)=   ret_pos(Ind_pos);
fp          =   (1+ret).*b_fc;
zl          =   Eff_z.*l;
% Continuation
BasMat      =   funbas(SS.FunApp.U.Space,fp);

if Flag_SS==1
    [rr,cc,vv]  =   find(BasMat);
    cc          =   cc+(ID(rr)-1)*SS.FunApp.U.Num;
    BasMat_U    =   sparse(rr,cc,vv,N_State,SS.FunApp.U.Num*SS.FunApp.ExoState.N);
    Val         =   BasMat_U*UCoefp;
else
    UCoefp_Mat  =   reshape(UCoefp,SS.FunApp.U.MatSize_State);
    Val         =   zeros(N_State,1);
    for ii_ID=1:SS.FunApp.ExoState.N
        TempInd         =   ID==ii_ID;
        Val(TempInd)    =   BasMat(TempInd,:)*UCoefp_Mat(:,ii_ID);
    end
end

% Value
Val         =   u + SS.BETA*Val;
V           =   struct('Val',Val,...
                       'Policy',struct('c',c,'l',l,'b_fc',b_fc, ...
                                       'fp',fp,'zl',zl));
if Flag_SS==1
    V.FlowVec   =   u;
    V.CoefMat   =   SS.BETA*BasMat_U;
end